home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / viewers / polyview / plyvw102.lha / PolyView1.02 / pvutil.c < prev    next >
C/C++ Source or Header  |  1990-11-13  |  5KB  |  219 lines

  1. #include "pv.h"
  2.  
  3.  
  4. long *
  5. p2i (x,y)
  6. /* DESCRIPTION:  Returns a pointer to an array composed of the coordinates.
  7. */
  8.     long x, y;
  9. {
  10.     static long p2i[2];
  11.  
  12.     p2i[0] = x;
  13.     p2i[1] = y;
  14.  
  15.     return(p2i);
  16. }
  17.  
  18.  
  19. float *
  20. p3f (x,y,z)
  21. /* DESCRIPTION:  Returns a pointer to an array composed of the coordinates.
  22. */
  23.     float x, y, z;
  24. {
  25.     static float p3f[3];
  26.  
  27.     p3f[0] = x;
  28.     p3f[1] = y;
  29.     p3f[2] = z;
  30.  
  31.     return(p3f);
  32. }
  33.  
  34. float
  35. facos2(x, r)
  36.     float x, r;
  37. {
  38.     return facos(x/r);
  39. }
  40.  
  41.  
  42. float
  43. fasin2(y, r)
  44.     float y, r;
  45. {
  46.     return (fasin(y/r));
  47. }
  48.  
  49.  
  50. void
  51. cart_to_sphere(x, y, z, rho, theta, phi)
  52.     float x, y, z;                  /* Input cartesian coordinates */
  53.     float *rho, *theta, *phi;       /* Output spherical equivalents */
  54. {
  55.     *rho = fhypot(x, fhypot(y, z));
  56.     *theta = fatan2(z, x);
  57.     *phi = facos2(y, *rho);
  58. }
  59.  
  60.  
  61. void
  62. sphere_to_cart(rho, theta, phi, x, y, z)
  63.     float rho, theta, phi;          /* Input spherical coordinates */
  64.     float *x, *y, *z;               /* Output cartesian equivalents */
  65. {
  66.     *x = rho * fcos(theta) * fsin(phi);
  67.     *z = rho * fsin(theta) * fsin(phi);
  68.     *y = rho * fcos(phi);
  69. }
  70.  
  71.  
  72. void
  73. gprintf(x, y, format, arg)
  74.     long x, y;
  75.     char * format;
  76.     float arg;
  77. /* DESCRIPTION:  gprintf prints a string to the graphics window at
  78. coordinates (x,y).  The "format" and "arg" are used to create the string that
  79. is to be printed, which must be less than 80 characters.
  80. */
  81. {
  82.     char string[80];
  83.     float cx, cy;
  84.  
  85.     /* Format the string */
  86.     sprintf(string, format, arg);
  87.  
  88.     /* Calculate the size of the string and its position */
  89.     cx = x;
  90.     cy = y - (getheight()/2);
  91.  
  92.     /* Print the string */
  93.     cmov2(cx,cy);
  94.     charstr(string);
  95.  
  96.     return;
  97. }
  98.  
  99.  
  100. int
  101. patmatch(pattern, subject)
  102.         char * pattern;
  103.         char * subject;
  104. /* DESCRIPTION:  Returns TRUE if the subject string matches the pattern and
  105. FALSE otherwise.  At this point, only a wildcard asterisk at the end of string
  106. is supported by this function.
  107. */
  108. {
  109.         /* As long as there is a complete match between the characters, */
  110.         /* continue the comparison */
  111.         while ((*pattern) && (*subject) &&
  112.                (toupper(*pattern) == toupper(*subject)) ) {
  113.                 pattern++;
  114.                 subject++;
  115.         }
  116.  
  117.         /* If the current pattern character is an asterisk, we automatically */
  118.         /* match the rest of the subject string */
  119.         if (*pattern == '*') {
  120.                 pattern = subject = "";
  121.         }
  122.  
  123.         return (toupper(*pattern) == toupper(*subject));
  124. }
  125.  
  126.  
  127.  
  128.  
  129. void
  130. open_windows(images, windows)
  131.     image_t * images;    
  132.     windat_t ** windows;
  133. /* DESCRIPTION:  open_windows creates windows for all of the "images".  The
  134. window information is added to the windows list.  Also, create a new palette
  135. window.  This release only supports a simgle view window.
  136. */
  137. {
  138.     image_t * cur_image;
  139.  
  140.     /* Only create a window for the current image */
  141.     cur_image = images;
  142.     prefsize(NTSC_XSIZ, NTSC_YSIZ);
  143.     create_window(cur_image->fn, images, windows, title_draw,
  144.               title_event);
  145.     current.window = *windows;
  146.     current.menu_id = (*windows)->win_id;
  147.     current.active_id = (*windows)->win_id;
  148.  
  149.     /* Create palette window, if there is data for it */
  150.     if (cur_image->color.ds->value != NULL) {
  151.         prefsize(PALETTE_X, PALETTE_Y);
  152.         create_window(cur_image->color.ds->name, images,
  153.                   windows, palette_draw, palette_event);
  154.     }
  155. }
  156.  
  157.  
  158.     windat_t *
  159.     create_window(name, image, windows, redraw_fn, event_fn)
  160.         char * name;
  161.         image_t * image;
  162.         windat_t ** windows;
  163.         int (*redraw_fn)();
  164.         int (*event_fn)();
  165.     /* DESCRIPTION:  Creates a new window for the "image", attaches it to
  166.     "event_fn" with it.  Opens a window and stores its ID in the window's
  167.     data structure.  Returns a pointer to the new window, NULL if failure.
  168.     */
  169.     {
  170.         windat_t * newwin;
  171.  
  172.         /* ...add a window data structure... */
  173.         newwin = (windat_t *) malloc(sizeof(windat_t));
  174.         newwin->next = *windows;
  175.         *windows = newwin;
  176.  
  177.         /* ...keep the process in the foreground after windows are */
  178.         /* opened... */
  179.         foreground();
  180.  
  181.         /* ...create the window... */
  182.         newwin->win_id = winopen(name);
  183.     
  184.         /* ...refer the window to the associated data and set the */
  185.         /* redraw and event handling functions. */
  186.         newwin->data = (char *) image;
  187.         newwin->redraw_fn = redraw_fn;
  188.         newwin->event_fn = event_fn;
  189.  
  190.         /* Clear the window and initialize its graphics */
  191.         doublebuffer();
  192.         cmode();
  193.         gconfig();
  194.         color(BACKGROUND);
  195.         clear();
  196.         swapbuffers();
  197.  
  198.         /* Return the address of the new window data structure. */
  199.         return (newwin);
  200.     }
  201.  
  202.  
  203.     windat_t *
  204.     get_windat(window, win_id)
  205.         windat_t * window;
  206.         int win_id;
  207.     /* DESCRIPTION:  Returns the window data structure from "windows"
  208.     that is tagged with "win_id".  If the window does not exist, returns
  209.     NULL.
  210.     */
  211.     {
  212.         /* Search for a matching window data structure */
  213.         while ((window != NULL) && (window->win_id != win_id)) {
  214.             window = window->next;
  215.         }
  216.  
  217.         return (window);
  218.     }
  219.